package com.example.service;

import com.example.entity.Order;
import io.camunda.zeebe.client.api.response.ActivatedJob;
import io.camunda.zeebe.spring.client.annotation.JobWorker;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;

/**
 * 支付验证工作器（Camunda 流程任务）
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class PaymentService {

    private final OrderService orderService;

    /**
     * 工作器：验证订单支付状态
     * type 与 BPMN 中任务的 "Job Type" 一致
     */
    @JobWorker(type = "validate-payment", autoComplete = true)
    public Map<String, Object> validatePayment(ActivatedJob job) {
        // 1. 获取流程变量（订单编号）
        String orderNo = job.getVariablesAsMap().get("orderNo").toString();
        log.info("开始验证订单支付状态：{}", orderNo);
        // 2. 获取订单信息（包含订单金额）
        Order order = orderService.getOrderByNo(orderNo);
        // 2. 模拟支付验证（实际场景对接支付网关）
        boolean paymentSuccess = true;  // 模拟支付成功
        if (!paymentSuccess) {
            throw new RuntimeException("订单支付失败：" + orderNo);
        }

        // 3. 更新订单状态为「已支付」
        orderService.updateOrderStatus(orderNo, Order.OrderStatus.PAID);
        log.info("订单支付验证通过，状态更新为 PAID：{}", orderNo);
        // 5. 返回订单金额作为流程变量，供网关条件判断使用
        // 【本次修改】添加订单金额到流程变量
        Map<String, Object> variables = new HashMap<>();
        variables.put("totalAmount", order.getTotalAmount().doubleValue());
        log.info("设置流程变量：totalAmount={}", order.getTotalAmount().doubleValue());

        return variables;
    }
}